|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ ПолеЗамена; (*============================================================================* * НАЗНАЧЕНИЕ: вывод вопроса о замене *============================================================================*) ИСПОЛЬЗУЕТ Надел, Поле, Подложка, Записка, Черта, Кнопка, Цепь ИЗ "..\Иное\", Ввод ИЗ "..\Обмен\"; ПОСТ (* действия кнопок и состояние поля *) сЗаменить- = 1; сВсе- = 2; сПропустить-= 3; (******************************************************************************) ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); (* получить и обработать управляющие послания *) УКАЗ ДЛЯ посылка ВИДА | Ввод.ОтКлавиш: ЕСЛИ посылка.код = 1BH ТО (* Esc *) поле.состояние:=Поле.сОтмена; посылка.код:=0 КОН | Кнопка.Посылка: поле.состояние:=посылка.кнопка.действие ИНАЧЕ КОН КОН Приём; (******************************************************************************) ЗАДАЧА Выполнить-():ЦЕЛ; (* состояние поля после отработки *) (* Цель: осуществить вывод вопроса *) (******************************************************************************) (* До: *) окружение:Поле.Доступ; (* окружающее поле *) образец-:ЦЕПЬ; (* искомая цепочка *) замена-:ЦЕПЬ (* новая цепочка *) (* Ответ: *) (******************************************************************************) ПОСТ (* цепочки для кнопок *) цЗаменить ="[ ~Заменить ]"; цВсе ="[ ~Все ]"; цПропустить ="[ ~Пропустить ]"; цОтмена ="[ Отмена ]"; длЗаменить =ДЛИНА(цЗаменить)-1; длВсе =ДЛИНА(цВсе)-1; длПропустить=ДЛИНА(цПропустить)-1; длОтмена =ДЛИНА(цОтмена); промежуток =2; (* промежуток между кнопками *) колонок=70; занято=длЗаменить + промежуток + длВсе + промежуток + длПропустить + промежуток + длОтмена; позЗаменить=1 + ((колонок-занято-1) ДЕЛИТЬ 2); позВсе=позЗаменить+длЗаменить+промежуток; позПропустить=позВсе+длВсе+промежуток; позОтмена=позПропустить+длПропустить+промежуток; позНа=1 + ((колонок-2-1) ДЕЛИТЬ 2); ПЕР поле:Поле.Доступ; подложка:Подложка.Доступ; черта:Черта.Доступ; зОбразец,зНа,зЗамена:Записка.Доступ; кнЗаменить,кнВсе,кнПропустить,кнОтмена:Кнопка.Доступ; цОбразец,цЗамена:ЦЕПЬ[128]; позОбразец,позЗамена:ЦЕЛ; УКАЗ цОбразец:='"'; Цепь.Добавить(цОбразец,образец); Цепь.ДобавитьЗнак(цОбразец,'"'); цЗамена:='"'; Цепь.Добавить(цЗамена,замена); Цепь.ДобавитьЗнак(цЗамена,'"'); позОбразец:=1+((колонок - ДЛИНА(цОбразец) -1) ДЕЛИТЬ 2); позЗамена :=1+((колонок - ДЛИНА(цЗамена) -1) ДЕЛИТЬ 2); (* создаём поле *) поле:=Поле.Создать(0,0,7,колонок,окружение,ВКЛ,Приём); (* создаём наделы *) подложка:= Подложка.Создать(0,0,0,0,"Замена"); зОбразец:= Записка.Создать (1,позОбразец,1,-2,цОбразец); зНа:= Записка.Создать (2,позНа,1,-2,'на'); зЗамена:= Записка.Создать (3,позЗамена,1,-2,цЗамена); черта:= Черта.Создать (4,0,1,0); кнЗаменить:= Кнопка.Создать (5,позЗаменить,цЗаменить,сЗаменить,ВКЛ); кнВсе:= Кнопка.Создать (5,позВсе,цВсе,сВсе,ВКЛ); кнПропустить:= Кнопка.Создать (5,позПропустить,цПропустить,сПропустить,ВКЛ); кнОтмена:= Кнопка.Создать (5,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); (* добавляем наделы в порядке отрисовки и получения ввода *) Поле.ДобавитьНадел(поле,подложка); Поле.ДобавитьНадел(поле,зОбразец); Поле.ДобавитьНадел(поле,зНа); Поле.ДобавитьНадел(поле,зЗамена); Поле.ДобавитьНадел(поле,черта); Поле.ДобавитьНадел(поле,кнЗаменить); Поле.ДобавитьНадел(поле,кнВсе); Поле.ДобавитьНадел(поле,кнПропустить); Поле.ДобавитьНадел(поле,кнОтмена); (* основная работа *) Поле.Рисовать(поле); ПОВТОРЯТЬ Поле.Проверить(поле) ДО поле.состояние # Поле.сРабота; (* восстанавливаем окружение *) Поле.Рисовать(окружение); ВОЗВРАТ поле.состояние КОН Выполнить; КОН ПолеЗамена. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|